Database Tutorials GridFS এর API এবং ব্যবহার গাইড ও নোট

306

MongoDB তে GridFS একটি ফাইল স্টোরেজ সিস্টেম, যা MongoDB ডেটাবেসে বড় আকারের ফাইল (যেমন ইমেজ, ভিডিও, পিডিএফ) সংরক্ষণ করতে ব্যবহৃত হয়। সাধারণত MongoDB তে ডেটা ডকুমেন্ট আকারে স্টোর করা হয়, কিন্তু যখন ফাইল বড় আকারের হয়, তখন MongoDB এর ডকুমেন্ট সাইজ সীমার (16MB) কারণে তা সরাসরি স্টোর করা সম্ভব নয়। এই সমস্যা সমাধানে GridFS ব্যবহার করা হয়, যা ফাইলগুলিকে ছোট ছোট অংশে (chunks) ভাগ করে MongoDB তে সঞ্চয় করে।

MongoDB তে GridFS ব্যবহারের মাধ্যমে বড় ফাইলগুলি সহজে MongoDB ডেটাবেসে সংরক্ষণ এবং পুনরুদ্ধার করা সম্ভব।


GridFS এর কিভাবে কাজ করে

  • GridFS ফাইলগুলোকে দুটি অংশে ভাগ করে সংরক্ষণ করে:
    1. chunks: ফাইলের প্রতিটি ছোট অংশ (যেমন 255KB)। MongoDB একটি কালেকশনে (স্বাভাবিকতঃ fs.chunks) এই অংশগুলো সঞ্চয় করে।
    2. files: ফাইলের মেটাডেটা (যেমন ফাইলের নাম, আকার) সংরক্ষিত থাকে একটি আলাদা কালেকশনে (স্বাভাবিকতঃ fs.files)।

GridFS MongoDB ডেটাবেসে এই দুটি কালেকশন ব্যবহার করে ডেটা সংরক্ষণ এবং পরিচালনা করে।


GridFS API

MongoDB তে GridFS ব্যবহার করার জন্য Mongoose অথবা MongoDB ড্রাইভার ব্যবহার করা যেতে পারে। নিচে GridFS এর কিছু গুরুত্বপূর্ণ API গুলি আলোচনা করা হয়েছে:

১. ফাইল আপলোড (Uploading Files)

ফাইল MongoDB ডেটাবেসে আপলোড করার জন্য GridFSBucket ব্যবহার করা হয়।

উদাহরণ (Node.js এবং MongoDB ড্রাইভার ব্যবহার করে):

const { MongoClient, GridFSBucket } = require('mongodb');
const fs = require('fs');
const path = require('path');

// MongoDB URI এবং ডাটাবেস কনফিগারেশন
const uri = 'mongodb://localhost:27017';
const dbName = 'mydatabase';

async function uploadFile() {
  const client = new MongoClient(uri);
  try {
    await client.connect();
    const db = client.db(dbName);
    const bucket = new GridFSBucket(db);

    const filePath = path.join(__dirname, 'largefile.txt'); // ফাইলের পথ
    const uploadStream = bucket.openUploadStream('largefile.txt'); // ফাইল নাম

    const fileStream = fs.createReadStream(filePath);
    fileStream.pipe(uploadStream)
      .on('error', (err) => {
        console.log("Error uploading file:", err);
      })
      .on('finish', () => {
        console.log('File uploaded successfully!');
      });

  } catch (error) {
    console.error("Error:", error);
  } finally {
    await client.close();
  }
}

uploadFile();

এখানে fs.createReadStream() ব্যবহার করে ফাইল স্ট্রিম করা হয় এবং bucket.openUploadStream() ব্যবহার করে MongoDB ডেটাবেসে ফাইলটি আপলোড করা হয়।

২. ফাইল ডাউনলোড (Downloading Files)

ফাইল ডাউনলোড করতে GridFSBucket এর openDownloadStreamByName বা openDownloadStream ব্যবহার করা হয়।

উদাহরণ:

async function downloadFile(fileName) {
  const client = new MongoClient(uri);
  try {
    await client.connect();
    const db = client.db(dbName);
    const bucket = new GridFSBucket(db);

    const downloadStream = bucket.openDownloadStreamByName(fileName);
    const writeStream = fs.createWriteStream(path.join(__dirname, 'downloaded_' + fileName));

    downloadStream.pipe(writeStream)
      .on('error', (err) => {
        console.log("Error downloading file:", err);
      })
      .on('finish', () => {
        console.log('File downloaded successfully!');
      });

  } catch (error) {
    console.error("Error:", error);
  } finally {
    await client.close();
  }
}

downloadFile('largefile.txt');

এখানে openDownloadStreamByName() ব্যবহার করে MongoDB ডেটাবেস থেকে ফাইলটি ডাউনলোড করা হয় এবং fs.createWriteStream() দিয়ে সেটি ফাইল হিসেবে স্টোর করা হয়।

৩. ফাইল মেটাডেটা পাওয়া (Getting File Metadata)

ফাইলের মেটাডেটা যেমন নাম, আকার, টাইপ ইত্যাদি পাওয়ার জন্য fs.files কালেকশন ব্যবহার করা হয়।

উদাহরণ:

async function getFileMetadata(fileName) {
  const client = new MongoClient(uri);
  try {
    await client.connect();
    const db = client.db(dbName);
    const filesCollection = db.collection('fs.files');

    const file = await filesCollection.findOne({ filename: fileName });

    console.log("File Metadata:", file);

  } catch (error) {
    console.error("Error retrieving file metadata:", error);
  } finally {
    await client.close();
  }
}

getFileMetadata('largefile.txt');

এটি ফাইলের মেটাডেটা যেমন ফাইলের নাম, আকার, আপলোডের তারিখ ইত্যাদি প্রদান করবে।


GridFS এর অন্যান্য ব্যবহার

  • ফাইল অংশে ভাগ করা (Chunking): GridFS ফাইলগুলোকে ছোট অংশে ভাগ করে সঞ্চয় করে, যা বড় ফাইলগুলোকে MongoDB ডেটাবেসে সহজে সংরক্ষণ করতে সহায়তা করে।
  • ফাইলের উপর কুয়েরি (Querying Files): ফাইলের নাম, আকার বা অন্যান্য মেটাডেটার ভিত্তিতে MongoDB ডেটাবেস থেকে ফাইল অনুসন্ধান করা যায়।

সারাংশ

MongoDB তে GridFS ব্যবহার করে বড় ফাইলগুলি ডেটাবেসে সঞ্চয় এবং পরিচালনা করা যায়। GridFS ফাইলগুলোকে ছোট ছোট অংশে ভাগ করে এবং MongoDB এর fs.chunks এবং fs.files কালেকশনগুলোতে সঞ্চয় করে। API গুলি ব্যবহার করে MongoDB তে ফাইল আপলোড, ডাউনলোড, এবং মেটাডেটা সংগ্রহ করা যায়। MongoDB GridFS বিশেষভাবে বড় ফাইলের জন্য উপযোগী, যা MongoDB ডেটাবেসে স্টোরেজ করতে সমস্যা সৃষ্টি করতে পারে। GridFS এর মাধ্যমে বড় ফাইলও MongoDB ডেটাবেসে সহজে সংরক্ষণ এবং ব্যবস্থাপনা করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...